﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using app.Models;
using AmuTools;

namespace app.Api
{
    /*
      查找，返回分页数据
    */
    public class ApiLogin : ApiBase
    {
        public ApiLogin(Controller ctx) : base(ctx) { }

        #region 自定义请求参数
        // 作者
        string req_author { get { return GetStringParam(new ReqStringParamOption { Name = "author", Level = REQPARAMLEVEL.FREE }); } }

        #endregion

        public void Admin(string action)
        {
            switch (action)
            {
                case "login":
                    if (Login(IDENTITY.ADMIN))
                    {
                        ResponseJson(new BooleanResult { value = true, message = Token });
                    }
                    else ResponseJson(new BooleanResult { value = false, message = "用户名或密码错误" });
                    break;
                case "logout":
                    Logout();
                    ResponseJson(new Result());
                    break;
                default: break;
            }
        }

        public void Member(string action)
        {
            switch (action)
            {
                case "login":
                    if (Login(IDENTITY.MEMBER))
                    {
                        ResponseJson(new BooleanResult { value = true, message = Token });
                    }
                    else ResponseJson(new BooleanResult { value = false, message = "用户名或密码错误" });
                    break;
                case "logout":
                    Logout();
                    ResponseJson(new Result());
                    break;
                case "register":

                    break;
                default: break;
            }
        }

        public void Me(string action)
        {
            switch (action)
            {
                case "get_info":
                    if (HasPermission(IDENTITY.ADMIN))
                    {
                        Admin admin = G.DB.GetById<Admin>(UserCode);
                        ResponseJson(new ObjectResult { data = admin });
                    }
                    else if (HasPermission(IDENTITY.MEMBER))
                    {
                        ResponseJson(new ObjectResult { data = G.DB.GetById<Member>(UserCode) });
                    }
                    else
                    {
                        ThrowStatus(STATUS.HASNOT_LOGIN, "检测不到身份，请重新登录！");
                    }
                    break;
                case "landing_state":
                    LANDINGSTATE landing_state = LandingServer.GetUnitState(UserIdentity + UserCode);
                    ResponseJson(new EnumResult { value = (int)landing_state, name = landing_state.ToString() });
                    break;
                default: break;
            }
        }
    }


}











//// 检测是否有与权限码对应的权限，需要提供角色权限、用户权限、权限码作为参数
//static public bool Check(string role_permission, string user_permission, string code)
//{
//    string module_code = code.Substring(0, 4);
//    string operation_code = code.Substring(4);
//    Regex r;
//    Match m;

//    // 检测是否为超级管理员
//    if (role_permission == "+100010") return true;

//    // 检测用户权限
//    // 用户附加权限检测
//    r = new Regex(string.Format(@"\+{0}\d+", module_code));
//    m = r.Match(user_permission);
//    if (m.Value != "") return CheckOperationCode(m.Value.Substring(5), operation_code);
//    // 用户禁用权限检测
//    r = new Regex(string.Format(@"\-{0}\d+", module_code));
//    m = r.Match(user_permission);
//    if (m.Value != "") return !CheckOperationCode(m.Value.Substring(5), operation_code);

//    // 检测角色权限
//    r = new Regex(string.Format(@"\+{0}\d+", module_code));
//    m = r.Match(role_permission);
//    if (m.Value != "") return CheckOperationCode(m.Value.Substring(5), operation_code);

//    return false;
//}
//static private bool CheckOperationCode(string operation_codes, string operation_code)
//{
//    if (operation_code.Length != 2) throw new Exception("操作码错误:" + operation_code);
//    if (operation_codes.Length % 2 != 0) throw new Exception("操作码组错误:" + operation_codes);

//    // 如果前两位为10代表所有权限，返回true
//    if (operation_codes[0] == '1' && operation_codes[1] == '0')
//    {
//        return true;
//    }

//    int index = 0;
//    int len = operation_codes.Length;
//    while (index < len)
//    {
//        if (operation_code[0] == operation_codes[index] && operation_code[1] == operation_codes[index + 1])
//        {
//            return true;
//        }
//        else
//        {
//            index += 2;
//        }
//    }
//    return false;
//}

//// 将权限码添加到权限中，返回新的权限
//static public string Add(string premission, string code)
//{
//    string module_code = code.Substring(0, 4);
//    string operation_code = code.Substring(4);
//    Regex r;
//    Match m;

//    // 如果为1000权限，不需要操作
//    //if (premission == "+100010") return premission;

//    // 从-XXXX中删除权限

//    // 向+XXXX中添加权限

//    // 如果为+XXXX10权限，不需要操作，否则向+XXXX中添加权限
//    r = new Regex(string.Format(@"\+{0}\d+", module_code));
//    m = r.Match(premission);
//    if (m.Value != "")
//    {
//        if (m.Value.Substring(5) == "10") return premission;
//        return CheckOperationCode(m.Value.Substring(5), operation_code);
//    }
//    return "";
//}
//static private string AddOperationCode(string operation_codes, string operation_code)
//{
//    if (operation_code.Length != 2) throw new Exception("操作码错误:" + operation_code);
//    if (operation_codes.Length % 2 != 0) throw new Exception("操作码组错误:" + operation_codes);

//    // 如果已经存在这个权限，则不需要操作直接返回，如果没有，将权限附加到最后
//    int index = 0;
//    int len = operation_codes.Length;
//    while (index < len)
//    {
//        if (operation_code[0] == operation_codes[index] && operation_code[1] == operation_codes[index + 1])
//        {
//            return operation_codes;
//        }
//        else
//        {
//            index += 2;
//        }
//    }
//    return operation_codes + operation_code;
//}
//static private string DeleteOperationCode(string operation_codes, string operation_code)
//{
//    if (operation_code.Length != 2) throw new Exception("操作码错误:" + operation_code);
//    if (operation_codes.Length % 2 != 0) throw new Exception("操作码组错误:" + operation_codes);

//    // 如果已经存在这个权限，则删除，没有则返回原来的值
//    int index = 0;
//    int len = operation_codes.Length;
//    while (index < len)
//    {
//        if (operation_code[0] == operation_codes[index] && operation_code[1] == operation_codes[index + 1])
//        {
//            return operation_codes.Substring(0, index) + (index + 2 < len ? operation_codes.Substring(index + 2) : "");
//        }
//        else
//        {
//            index += 2;
//        }
//    }
//    return operation_codes;
//}

//// 禁用某个权限，返回新的权限
//static public string Forbidden(string premission, string code, bool value)
//{
//    return "";
//}

//// 从权限中删除权限码对应权限，返回新的权限
//static public string Delete(string premission, string code)
//{
//    return "";
//}